package org.langqiao.string;
/*
 * 在实际的开发工作中，对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下：
1.	把每个单词的首字母变为大写。
2.	把数字与字母之间用下划线字符（_）分开，使得更清晰
3.	把单词中间有多个空格的调整为1个空格。
例如：
	用户输入：
   you and     me what  cpp2005program
   则程序输出：
   You And Me What Cpp_2005_program
	用户输入：
   this is     a      99cat
   则程序输出：
   This Is A 99_cat

我们假设：用户输入的串中只有小写字母，空格和数字，不含其它的字母或符号。每个单词间由1个或多个空格分隔。
假设用户输入的串长度不超过200个字符。
要求考生把所有类写在一个文件中。调试好后，存入与考生文件夹下对应题号文件夹中的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。
另外，源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。

 */
import java.util.*;
public class StrProcess {
	
	public static void main(String[] args) {
		String s = null;
		int count = 0;
		while(true){
			do{
				System.out.println("请输入一窜字符窜：");
				Scanner sc = new Scanner(System.in);
				//去掉开头的空格
				s = sc.nextLine().trim();
			}while(s.length()>200);
	//		s=s.replaceAll(" +"," ");
	//		String[] c1=s.split("\\s+");
			//亿多个空格来进行拆分字符窜
			String[] c1 = s.split("\\s+");
			for(int i = 0;i < c1.length;i++) {
				Format(c1[i]);//调用Format方法，对拆分后的字符窜进行处理
			}
		}
	}
	
	public static void Format(String s){
		//将字符窜转换为字符数组
		char[] c = s.toCharArray();
		StringBuffer sb = new StringBuffer();
		for(int i = 0;i < c.length;i++){
			//如果是0到9的数字,则直接添加到StringBuffer中
			if(c[i] >= 48 && c[i] <= 57) {
				sb.append(c[i]);
			}else {	//如果经过判断后是字母，则有两种情况进行判断，一种是前一位是数字，另一种是后一位是数字
				if((i-1)>=0&&c[i-1]>=48&&c[i-1]<=57) {
					sb.append("_");
					sb.append((""+c[i]).toUpperCase());//c[i]是字符类型，加上""转换为字符窜类型
				} else if(i==0) {
					sb.append((""+c[i]).toUpperCase());
				} else {
					sb.append(c[i]);
				}
				if((i+1)<c.length&&c[i+1]>=48&&c[i+1]<=57) {
					sb.append("_");//添加分隔符
				}
			}
		}
		System.out.print(sb+" ");//一定要记住，这里千万不要忘记添加" "，空格，因为sb是对个分割后的每个字符窜(即单词)进行处理后的结果
	}
}
